package 滑动窗口;

/**
 * 爱生气的书店老板
 * 有一个书店老板，他的书店开了n分钟。每分钟都有一些顾客进入这家商店。给定一个长度为 n 的整数数组 customers ，其中 customers[i] 是在第 i 分钟开始时进入商店的顾客的编号，所有这些顾客在第 i 分钟结束后离开。
 * 在某些时候，书店老板会生气。 如果书店老板在第 i 分钟生气，那么 grumpy[i] = 1，否则 grumpy[i] = 0。
 * 当书店老板生气时，那一分钟的顾客就会不满意，若老板不生气则顾客是满意的。
 * 书店老板知道一个秘密技巧，能抑制自己的情绪，可以让自己连续minutes分钟不生气，但却只能使用一次。
 * 请你返回 这一天营业下来，最多有多少客户能够感到满意 。
 * 输入：customers = [1,0,1,2,1,1,7,5], grumpy = [0,1,0,1,0,1,0,1], minutes = 3
 * 输出：16
 * 解释：书店老板在最后 3 分钟保持冷静。
 * 感到满意的最大客户数量 = 1 + 1 + 1 + 1 + 7 + 5 = 16.
 * 输入：customers = [1], grumpy = [0], minutes = 1
 * 输出：1
 */
public class LeetCode1052 {
    public static void main(String[] args) {
        int[] customers = {1, 0, 1, 2, 1, 1, 7, 5};
        int[] grumpy = {0, 1, 0, 1, 0, 1, 0, 1};
        int minutes = 3;
        int result = maxSatisfied1(customers, grumpy, minutes);
        System.out.println(result);
    }

    public static int maxSatisfied1(int[] customers, int[] grumpy, int minutes) {
        int result = 0;
        int cums = customers.length;
        for (int i = 0; i < cums; i++) {
            if (grumpy[i] == 0) {
                result += customers[i];
                customers[i] = 0;
            }
        }
        int count = 0;
        int sum = 0;
        for (int i = 0; i < cums; i++) {
            sum += customers[i];
            if (i >= minutes) {
                sum -= customers[i - minutes];
            }
            count = Math.max(count, sum);
        }
        return result + count;
    }
//    public static int maxSatisfied(int[] customers, int[] grumpy, int minutes) {
//        int result = 0;
//        int cums = customers.length;
//        for (int i = 0; i < cums; i++) {
//            if (grumpy[i] == 0) {
//                result += customers[i];
//                customers[i] = 0;
//            }
//        }
//        // 剩下的元素中找 顾客最多的 连续 minutes个元素
//        int left = 0;
//        int right = 0;
//        int sum = 0;
//        int count = 0;
//        while (right < cums) {
//            if (right < minutes) {
//                sum += customers[right];
//            } else {
//                sum += customers[right];
//                sum -= customers[left];
//                left++;
//            }
//            count = Math.max(count, sum);
//            right++;
//        }
//        return result + count;
//    }
}
